0 REM FIFTEEN PUZZLE V 4.4 FOR C-64,WRITTEN FOR TRS-80 BY W.L.COLSHER 10 REM KB/MICROCOMP.,V.5,P.114,FEB.1981.MODIFIED AND CONVERTED FOR C-64 BY 20 REM Z.SZEPESI 2611 SAYBROOK DRIVE,PITTSBURGH,PA 15235 30 POKE53281,13:POKE53280,2:PRINT"[147][144] FIFTEEN PUZZLE." 40 PRINT" [184][184][184][184][184][184][184][184][184][184][184][184][184][184][184]" 50 PRINT" **DO YOU NEED INSTRUCTIONS?" 60 PRINT" PRESS 'Y', OR ANY OTHER KEY FOR NO." 70 GETA$:IFA$=""THEN70 80 IFA$="Y"THENGOSUB1310 90 REM ***INITIALISATION************************ 100 DIM A(20):M=0:S=54272:PRINT"[147]" 110 A$=" [213][195][195][195][195][178][195][195][195][195][178][195][195][195][195][178][195][195][195][195][201]":REM SH=SHIFT;CM=COMMODORE KEY IN FOLLOWING 120 REM SPACE;SH U;4 SH C;CM R;4 SH C;CM R;4 SH C;CM R;4 SH C;SH I 130 B$=" [171][192][192][192][192][219][192][192][192][192][219][192][192][192][192][219][192][192][192][192][179]" 140 REM SPACE;CM Q;4 SH C;SH +;4 SH C;SH +;4 SH C;SH +;4 SH C;CM W 150 C$=" [194] [160][160][160][221][160][160][160][160][221][160][160][160][160][221][160][160][160][160][194]" 160 REM SPACE;SH B;4 SPACE;SH B;4 SPACE;SH B;4 SPACE;SH B;4 SPACE;SH B 170 D$=" [202][195][195][195][195][177][195][195][195][195][177][195][195][195][195][177][195][195][195][195][203]" 180 REM SPACE;SH J;4 SH C;CM E;4 SH C;CM E;4 SH C;CM E;4 SH C;SH K 190 PRINTA$:FORI=1TO3 200 PRINTC$:PRINTC$:PRINTB$:NEXTI 210 PRINTC$:PRINTC$:PRINTD$:IFQ=1THEN RETURN 220 PRINT" **WAIT PLEASE" 230 FORX=1TO16:A(X)=0:NEXT:REM **CREATING A SET OF RANDOM NUMBERS** 240 FORI=1TO16 250 X=INT(16*RND(RND(0)))+1:IFA(X)THEN250 260 A(X)=I:NEXT 270 GOSUB510:TI$="000000":IFF=0THEN230 280 PRINT:GOSUB610:PRINT:PRINT" ":REM 17 SPACES 290 PRINT"[145] *YOUR MOVE";:X$="":X1$="":REM **PLAY STARTS***** 300 GETX$:IFX$=""THEN300 310 IFX$="_"THENX=1:GOTO350 320 IFX$<>"1"GOTO340 330 GETX1$:IFX1$=""GOTO330 340 X$=X$+X1$:X=VAL(X$) 350 PRINTX:GOSUB410:GOSUB710:IFF THEN370 360 PRINT" *ILLEGAL MOVE,RE-ENTER":GOTO280 370 A(X+F)=A(X):A(X)=16:GOTO910 380 M=M+1:GOTO280 400 REM ***CONVERT NUMBER TO LOCATION IN ARRAY*** 410 FORI=1TO16:IFA(I)=XTHEN430 420 NEXT 430 X=I:RETURN 500 REM ***VERIFY IF SOLUTION IS POSSIBLE******** 510 F=0:SU=0:FORI=1TO15:FORJ=I+1TO16 520 IFA(I)>A(J)THENSU=SU+1 530 NEXTJ:NEXTI:RESTORE 540 FORI=1TO8:READX:IFA(X)=16THENSU=SU+1 550 NEXTI 560 A=INT(SU/2):IFA*2=SUTHENF=1 570 RETURN 580 DATA2,4,5,7,10,12,13,15 600 REM ***DISPLAY GAME BOARD******************** 610 PRINT"":PRINT:FORI=1TO4:PRINT 620 PRINTSPC(1):FORJ=1TO4:N=A((I-1)*4+J):PRINTSPC(1);:N$=STR$(N) 630 IFN<10THENPRINT" "; 640 IFN=16THEN N$=" " 650 PRINTN$;SPC(1); 660 NEXTJ:PRINT:PRINT 670 NEXTI 680 PRINT:RETURN 700 REM ***CHECK FOR LEGAL MOVE****************** 710 F=0:IFX>16THEN RETURN 720 IF(X=4ORX=8ORX=12)ANDA(X+1)=16THENRETURN 730 IF(X=5ORX=9ORX=13)ANDA(X-1)=16THENRETURN 740 IFX+1>16THEN760 750 IFA(X+1)=16THENF=1 760 IFX-1<=0THEN780 770 IFA(X-1)=16THENF=-1 780 IFX+4>16THEN800 790 IFA(X+4)=16THENF=4 800 IFX-4<0THEN820 810 IFA(X-4)=16THENF=-4 820 IFF THENPRINT" ":REM 26 SPACES 830 RETURN 900 REM ***CHECK FOR A WIN*********************** 910 FORI=1TO16 920 IFA(I)<>ITHEN380 930 NEXT 940 GOSUB610:T$=TI$ 950 GOSUB1110:PRINT"[147] *CONGRATULATIONS!!!" 960 PRINT" YOU DID IT IN ONLY"M"MOVES!!" 970 PRINT" *AND YOU NEEDED "VAL(MID$(T$,1,2))"HOUR,"; 980 PRINT VAL(MID$(T$,3,2))"MINUTES" 990 PRINT" AND"VAL(MID$(T$,5,2))"SECONDS." 1000 PRINT" **PRESS 'Y' TO PLAY AGAIN OR ANY OTHER KEY TO END." 1010 GETA$:IFA$=""THEN1010 1020 IFA$="Y"THENCLR:GOTO100 1030 END 1100 REM ***SOUND SUBROUTINES********************* 1110 FORL=STOS+24:POKEL,0:NEXT:POKES+24,15 1120 POKES+5,0:POKES+12,0:POKES+19,0:POKES+6,240:POKES+13,240:POKES+20,240 1130 RESTORE 1140 FORI=1TO8:READZ:NEXT 1150 READH1,H2,H3:IFH1=-1THENFORL=STOS+24:POKEL,0:NEXT:RETURN 1160 READL1,L2,L3,D:POKES+1,H1:POKES+8,H2:POKES+15,H3 1170 POKES,L1:POKES+7,L2:POKES+14,L3:POKES+4,17:POKES+11,17:POKES+18,17 1180 FORT=1TOD:NEXT:POKES+4,16:POKES+11,16:POKES+18,16:FORT=1TO50:NEXT:GOTO1150 1190 DATA25,12,6,30,143,71,100 1200 DATA25,12,6,30,143,71,100 1210 DATA25,12,6,30,143,71,100 1220 DATA19,9,4,239,247,251,400,0,0,0,0,0,0,100 1230 DATA22,11,5,96,48,152,100 1240 DATA22,11,5,96,48,152,100 1250 DATA22,11,5,96,48,152,100 1260 DATA18,9,4,209,104,180,800,-1,1,1 1300 REM ***INSTRUCTIONS************************** 1310 PRINT"[147] FIFTEEN PUZZLE" 1320 PRINT" [183][183][183][183][183][183][183][183][183][183][183][183][183][183]" 1330 PRINT" *THE OBJECT OF THE FIFTEEN PUZZLE IS" 1340 PRINT" TO MOVE THE NUMBERS AROUND, SO THAT" 1350 PRINT" THEY ARE IN ORDER FROM 1 TO 15." 1360 PRINT" A MOVE IS MADE BY TYPING IN THE NUMBER" 1370 PRINT" YOU WISH TO MOVE. HOWEVER, IF YOU" 1380 PRINT" WANT TO MOVE THE NUMBER '1', PRESS" 1390 PRINT" INSTEAD THE LEFT ARROW ('_')." 1400 PRINT" *THE NUMBER TO BE MOVED MUST BE" 1410 PRINT" ADJACENT TO THE EMPTY SQUARE." 1420 PRINT" THE TYPED NUMBER THEN MOVES INTO THE" 1430 PRINT" EMPTY SQUARE." 1440 PRINT" *DO NOT PRESS RETURN AFTER TYPING THE" 1450 PRINT" NUMBER." 1460 PRINT" *YOU WIN, WHEN THE BOARD LOOKS LIKE THE" 1470 PRINT"[145] FIGURE WHICH FOLLOWS:" 1480 PRINT" **PRESS ANY KEY TO CONTINUE" 1490 GETA$:IFA$=""THEN1490 1500 Q=1:GOSUB100 1510 FORI=1TO16:A(I)=I:NEXTI 1520 GOSUB610 1530 PRINT" **PRESS ANY KEY TO START" 1540 GETA$:IFA$=""THEN1540 1550 Q=0:CLR:GOTO100 1560 PRINT" **PRESS ANZ KEY TO CONTINUE" 1570 GETA$:IFA$=""THEN1570 1580 PRINT"[147]":RETURN